Flask中模板及其使用(一) – 源码巴士 您所在的位置:网站首页 listreverse python Flask中模板及其使用(一) – 源码巴士

Flask中模板及其使用(一) – 源码巴士

#Flask中模板及其使用(一) – 源码巴士| 来源: 网络整理| 查看: 265

                                                                  Flask中模板及其使用     所谓模板,其实就是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取.在Flask中,模板使用的就是Jinja2引擎. # 模板并不特指HTML文件,HTML文件只是模板的一种.

视图的作用:(未使用模板时)     在前面面的示例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。实际上,视图函数有两个作用:处理业务逻辑和返回响应内容。在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。本节学到的模板,它的作用即是承担视图函数的另一个作用,即返回响应内容。

模板作用: 返回响应内容,此时不再由视图返回. 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取 使用真实值替换变量,再(控制)返回最终得到的字符串,这个过程称为“渲染”。 Flask是使用 Jinja2 这个模板引擎来渲染模板

Jinja2 .Jinja2:     是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,是Flask内置的模板语言。 .模板语言:     是一种被设计来自动生成文档的简单文本格式,在模板语言中,一般都会把一些变量传给模板,替换模板的特定位置上预先定义好的占位变量名。

渲染模板函数 Flask提供的 render_template 函数封装了该模板引擎 render_template 函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。

一.模板的使用 # 通过函数调用 # 语法:render_template('选择的模板名', '模板中传入变量=变量')  此函数封装了模板引擎Jinja2

from flask import Flask from flask_script import Manager from flask import render_template --------部分代码省略 @app.route('/') def index():     # return 'hello world'  # 浏览器可以渲染超文本标记语言     return render_template('demo8.html')  # 模板中数据固定

if __name__ == '__main__':     # 代替app 调用run方法     manager.run()

# def render_template(template_name_or_list, **context):     """Renders a template from the template folder with the given     context.

    :param template_name_or_list: the name of the template to be                                   rendered, or an iterable with template names                                   the first one existing will be rendered     :param context: the variables that should be available in the                     context of the template.     """

二.动态传入数据给模板 1.变量  # 用在模板中 存储数据,被动过程.将传入模板的数据全部输出. 语法:{{变量名}}  # 模板中使用,和Djnago中模板变量相同 @app.route('/') def index():     info = 'oo'     return render_template('demo1.html', info=info) # 将变量info写入模板文件中

2.语句  # 用在模板中 作用:控制输出,主动过程.在模板中,对传入的数据进行选择性输出. 条件语句/判断语句 语法:{% if 表达式 %}{% elif 表达式 %}{% endif %}

.循环语句 语法:{% for %}{% endfor %},必须有结束语句,用来结束代码. 快捷键:Table # .py    # 使用哪个模板,传递哪些数据给选中模板 @app.route('/') def index():     # return 'hello world'  # 浏览器可以渲染超文本标记语言     # return render_template('demo8.html')  #     info = 'oo'     # return render_template('demo8.html', info=info)     my_list = [1, 4, 7, 21]     return render_template('demo.html', my_list=my_list)

#demo.html # 输出哪些数据 {# 变量语法 #} {{ info }} {# {{ my_list }}#} {% for index in my_list %}     {% if index > 4 %} {#        

index

#}        

{{ index }}

    {% endif %} {% endfor %}  # 结束代码块,python中用缩进来结束

# 注意: 变量用的是双括号,语句用的是单括号. 模块化:把具体的功能模块拆分出去,达到解耦合.

三.过滤器        过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器。 用途:格式化输出数据,用在模板中. 本质:函数 语法:{{variable | filter_name(*args)}}   #  控制变量值格式化输出,所以用双括号.如果没有任何参数传给过滤器,则可以把括号省略掉.   # 控制变量值格式化输出,所以用双括号. # 过滤器支持链式调用,即多个过滤器从前到后依次调用.{{variable | filter_name1(*args) | filter_name2(*args} | ...}   1.过滤器的使用 字符串处理 safe: 禁用转义,确认数据没有安全隐患的前提下(模板默认情况下开启转义,即将字符串中的&' ” 特殊字符,当成原始字符串进行输出.开启转义是处于安全考虑) capitalize:首字母大写,其余字母小写; lower:转小写 upper:转大写 title:把值中的每个单词的首字母都转成大写 format:格式化输出   

{{ '%s is %d' | format('name',17) }}

striptags:渲染之前把值中所有的HTML标签都删掉                  

{{ 'hello' | striptags }}

reverse: 字符串反转 2.列表处理 first:获取列表中第一个元素. last: 获取列表中最后一个元素. length: 获取列表中元素数量. sum: 对列表中数据进行求和. sort: 对列表进行排序. 3.语句块操作 {% filter upper %}     #一大堆文字# {% endfilter %} 4.自定义过滤器        过滤器的本质是函数。当模板内置的过滤器不能满足需求,可以自定义过滤器。自定义过滤器有两种实现方式:        一种是通过Flask应用对象的 add_template_filter 方法        另一种是通过装饰器来实现自定义过滤器。 重要:自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。

需求:添加列表反转的过滤器

方式一

通过调用应用程序实例的 add_template_filter 方法实现自定义过滤器。该方法第一个参数是函数名,第二个参数是自定义的过滤器名称: # 自定义的过滤器 def do_listreverse(li):     # 通过原列表创建一个新列表     temp_li = list(li)     # 将新列表进行返转     temp_li.reverse()     return temp_li

app.add_template_filter(do_listreverse,'lireverse') 方式二

用装饰器来实现自定义过滤器。装饰器传入的参数是自定义的过滤器名称。 # 自定义的过滤器 @app.template_filter('lireverse') def do_listreverse(li):     # 通过原列表创建一个新列表     temp_li = list(li)     # 将新列表进行返转     temp_li.reverse()     return temp_li 在 html 中使用该自定义过滤器 my_array 原内容:{{ my_array }} my_array 反转:{{ my_array | lireverse }} 运行结果 my_array 原内容:[3, 4, 2, 1, 7, 9]  my_array 反转:[9, 7, 1, 2, 4, 3]  



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有